# print(a)  # NameError: name 'a' is not defined

"""
像这种异常信息，都是可以捕捉的
"""
"""
try:
    尝试执行这里的代码块
except:
    如果报错的话，执行这里的代码
else:
    如果代码没报错，执行这里
finally:
    不管代码成功与否，都会执行这里的代码
"""
"""
try:
    # print(a)
    list1 = [10,20,30]
    print(list1[100])
except NameError as e:
    print(f"代码报错了，老兄检查下，报错信息为：{e}")
except IndexError as e:     # 索引越界了，报错信息就会执行这里
    print(f"代码报错了，报错信息为：{e}")
except Exception as e:      # Exception万能捕获，只要是异常信息，这里都会走到的；as e表示起了一个别名
    print(f"代码报错了，老兄检查下，报错信息为：{e}")
else:
    print("代码稳定运行，无异常")
finally:
    print("代码执行结束")
"""
"""
代码执行结果：
代码报错了，老兄检查下
代码执行结束
"""
# 案例一
"""
try:
    list1 = [11,22,33]
    print(list1[2])
except Exception as e:
    print(f"代码报错了，检查下信息：{e}")
else:
    print("代码无异常")
finally:
    print('代码执行完毕')
"""
"""
执行结果：
33
代码无异常
代码执行完毕
"""

# ==================== 断言=======================
# list1 = [11,22,33]
# assert 11 in list1
"""
assert：断言关键字，进行判断。如果代码无异常，不会有任何信息显示，代码报错，显示Assertion Error
断言的判断符号：
in：包含在里。举例子： 
list1 = [11,22,33]  
assert 11 in list1

or：或者的关系。举例子：
assert (11 or 22) in list1

==：相等的关系。举例子：
a = 100
assert a == 100

>=：判断是否大于等于
<=: 判断是否小于等于
!=：判断不等于
is：判断地址值是否相同
not in ：判断是否不在里
"""

# ==================主动抛出异常信息===================
name = input("请输入你的姓名：")
if name == '小白':
    raise "姓名不能是小白，必须报错"
else:
    print(name)
"""
raise：主动抛出异常关键字，后面跟上自定义的提示信息
"""





